package util

import (
	"encoding/json"
	"fmt"
	"os"
)

func WriteJsonToFile(data interface{}, file *os.File) {
	encoder := json.NewEncoder(file)
	err := encoder.Encode(data)
	if err != nil {
		fmt.Println("Error encoding JSON to file:", err)
		return
	}
}

func OpenFileOrCreate(filePath string) *os.File {
	// 使用 os.OpenFile 尝试打开文件，如果不存在则创建它
	// os.O_CREATE 表示如果文件不存在则创建它，os.O_RDWR 表示以读写模式打开文件。
	// 0666 是一个八进制数，表示文件的权限。在 Unix 文件系统中，0666 相当于 rw-rw-rw-（所有者、组和其他人都有读写权限）。
	file, err := os.OpenFile(filePath, os.O_CREATE|os.O_RDWR, 0777)
	if err != nil {
		fmt.Println("文件打开错误:", err)
		return nil
	}

	// 在 Go 语言中，defer 语句用于安排函数调用在当前函数返回前执行。defer 最常用于确保资源（如文件、网络连接、锁等）被正确释放，即使在函数中有多个返回点的情况下也是如此。
	// 即使在文件操作过程中出现错误，或者函数提前返回，文件依然会被关闭。这是管理资源的一种最佳实践。
	//defer file.Close()

	// 检查文件是否之前已经存在
	// 获取文件状态信息
	info, err := file.Stat()
	if err != nil {
		fmt.Println("获取文件状态信息失败:", err)
		return nil
	}

	if !info.IsDir() && info.Size() == 0 {
		fmt.Println("文件创建成功！")
	} else {
		fmt.Println("文件已存在。执行打开操作。")
	}

	return file
}
